package ams

import (
	"lib/structs/base"
	"lib/structs/tables"
)

type SearchClientPage struct {
	base.Page
	Hostname string `form:"hostname"`
	Ip       string `form:"ip"`
}

type ClientDto struct {
	tables.AmsClient
	IsOnline    bool  `json:"isOnline"`
	LastMsgTime int64 `json:"lastMsgTime,string"` // 最后一次收到数据的时间
}

type ChatInDto struct {
	IsAi      bool   `json:"isAi"`             // 是否为AI模式
	MsgType   string `json:"msgType"`          // 问题类型，可选：inst-指令、llm-调用大模型、report-报表查询、data-数据库查询 等等
	Question  string `json:"question"`         // 问题，也就是用户输入的内容
	ClientId  int64  `json:"clientId,string"`  // 客户端id，标记这个内容是针对谁的
	Timestamp int64  `json:"timestamp,string"` // 问题发送的时间
}

type ChatOutDto struct {
	MsgType  string `json:"msgType"`  // 消息类型，
	Response string `json:"response"` // 响应
}

// SearchPolicyDto 查询策略的结构体
type SearchPolicyDto struct {
	Name    string `json:"name" form:"name"`
	ResCode string `json:"resCode" form:"resCode"`
}

// AddPolicyDto 添加策略使用的结构体
type AddPolicyDto struct {
	Name            string `json:"name"`
	Description     string `json:"description"`
	ResCode         string `json:"resCode"`          // 对信息细节进行二次分流处理,策略下发时就需要标记好会返回的结果的内容，用string 是为了更好的使用反射调用处理方法
	CheckField      string `json:"checkField"`       // 检查数据变化时需要考虑的字段，这里是对象的属性名，不是json的key。因为这段值会被反射调用,- 全量调用
	Cmd             string `json:"cmd"`              // 插件
	Args            string `json:"args"`             // 参数
	WorkSpace       string `json:"workspace"`        // 工作空间
	TimeoutDuration int    `json:"timeoutDuration"`  // 超时时间
	IsBoot          bool   `json:"isBoot"`           // 是否需要在程序启动时强制触发策略，例如硬件类检测
	IsDial          bool   `json:"isDial"`           // 是否需要在网络重连时强制触发策略，例如本地策略更新、IP地址检查等等
	IsLogin         bool   `json:"isLogin"`          // 是否需要在登录系统会话时强制触发
	Cycle           string `json:"cycle"`            // 执行间隔，month-月、week-周、day-天、hour-小时、minute-分钟
	Num             int    `json:"num"`              // 间隔数值
	Times           int    `json:"times"`            // 执行次数 1-一次性，2-周期性
	StartTime       int64  `json:"startTime,string"` // 开始时间，0表示无限制
	EndTime         int64  `json:"endTime,string"`   // 结束时间，0-无限制
	ImpactScope     int    `json:"impactScope"`      // 受影响的范围，1-全局；2-指定设备
}

type UpdatePolicyDto struct {
	Id              int64  `json:"id,string"`
	Name            string `json:"name"`
	Description     string `json:"description"`
	ResCode         string `json:"resCode"`          // 对信息细节进行二次分流处理,策略下发时就需要标记好会返回的结果的内容，用string 是为了更好的使用反射调用处理方法
	CheckField      string `json:"checkField"`       // 检查数据变化时需要考虑的字段，这里是对象的属性名，不是json的key。因为这段值会被反射调用,- 全量调用
	Cmd             string `json:"cmd"`              // 插件
	Args            string `json:"args"`             // 参数
	WorkSpace       string `json:"workspace"`        // 工作空间
	TimeoutDuration int64  `json:"timeoutDuration"`  // 超时时间
	IsBoot          bool   `json:"isBoot"`           // 是否需要在程序启动时强制触发策略，例如硬件类检测
	IsDial          bool   `json:"isDial"`           // 是否需要在网络重连时强制触发策略，例如本地策略更新、IP地址检查等等
	IsLogin         bool   `json:"isLogin"`          // 是否需要在登录系统会话时强制触发
	Cycle           string `json:"cycle"`            // 执行间隔，month-月、week-周、day-天、hour-小时、minute-分钟
	Num             int    `json:"num"`              // 间隔数值
	Times           int    `json:"times"`            // 执行次数 1-一次性，2-周期性
	StartTime       int64  `json:"startTime,string"` // 开始时间，0表示无限制
	EndTime         int64  `json:"endTime,string"`   // 结束时间，0-无限制
	ImpactScope     int    `json:"impactScope"`      // 受影响的范围，1-全局；2-指定设备
}

// AddPluginDto 添加插件的结构体
type AddPluginDto struct {
	Name         string `json:"name"`        // 名称，例如 miao
	Description  string `json:"description"` // 描述信息
	Source       string `json:"source"`      // 来源，可选：miao、win、linux
	DownloadUrl  string `json:"downloadUrl"` // 下载地址
	UnTarget     string `json:"unTarget"`    // 文件释放路径，如果为空就是不需要释放的文件，例如win系统自带的文件
	Version      string `json:"version"`
	Md5          string `json:"md5"`          // 主程序的MD5
	ZipMd5       string `json:"zipMd5"`       // 压缩包的MD5
	CheckVersion bool   `json:"checkVersion"` // 是否需要检查版本
	CheckMd5     bool   `json:"checkMd5"`     // 是否需要检查md5
	IsRequired   bool   `json:"isRequired"`   // 是否为必须插件
}

type UpdatePluginDto struct {
	Id          int64  `json:"id,string" `
	Name        string `json:"name"`        // 名称，例如 miao
	Description string `json:"description"` // 描述信息
	Source      string `json:"source"`      // 来源，可选：miao、win、linux

	DownloadUrl  string `json:"downloadUrl"` // 下载地址
	UnTarget     string `json:"unTarget"`    // 文件释放路径，如果为空就是不需要释放的文件，例如win系统自带的文件
	Version      string `json:"version"`
	Md5          string `json:"md5"`          // 主程序的MD5
	ZipMd5       string `json:"zipMd5"`       // 压缩包的MD5
	CheckVersion bool   `json:"checkVersion"` // 是否需要检查版本
	CheckMd5     bool   `json:"checkMd5"`     // 是否需要检查md5
	IsRequired   bool   `json:"isRequired"`   // 是否为必须插件
}
